package framework.catalog;

import junit.framework.Assert;

import org.openqa.selenium.By;

import framework.elements.Label;

/** Описывает каталог без дерева. Возможно будет переименован.
 */
public class CatalogWithoutTreeForm extends BaseCatalog{

	/** Базовый конструктор.
	 * @param name наименование сущности, для поиска которой предназначен каталог.
	 */
	public CatalogWithoutTreeForm(final String name) {
		super(By.xpath("//input[@value='Поиск']"), "Справочник без дерева");
		this.entityName = name;
	}
	private final int maxColumnsCount = 10;
	private String entityName;
	private final String tableColumnsTemplate = "//table[contains(@class,'maintable')]//thead//tr/th[%s]";
	private final String codeTemplate = "//table[contains(@class,'maintable')]//tbody//tr/td[%s]";
	private final String nameTemplate = "//table[contains(@class,'maintable')]//tbody//tr/td[%s]//a[contains(@onclick,'insert')]";
	private int codeColumn = 0;
	private int nameColumn = 0;

	/** Инициализирует колонки таблицы.
	 */
	private void initializeColumns(){
		Label l = null;
		for(int i = 1; i < maxColumnsCount; i++){
			l = new Label(By.xpath(String.format(tableColumnsTemplate, i)), "Наименование колонки");
			if(l.isPresent()){
				if(codeColumn == 0) {
					if(l.getText().contains("Код")){
						codeColumn = i;
					}else{
						codeColumn = 0;
					}
				}
				if(nameColumn == 0) {
					if(l.getText().contains("Наименование")){
						nameColumn = i;
					}else{
						nameColumn = 0;
					}
				}
				if(nameColumn != 0 && codeColumn != 0) {
					return;
				}
			}
		}
		Assert.assertEquals("Не было найдено колонки содержащей текст 'Код'", false, codeColumn == 0);
		Assert.assertEquals("Не было найдено колонки содержащей текст 'Наименование'", false, nameColumn == 0);
	}

	/** Возвращает код выбираемой сущности
	 * @return код
	 */
	public String getCode(){
		initializeColumns();
		Label l = new Label(By.xpath(String.format(codeTemplate, codeColumn)), "Код " + entityName);
		logger.info("Код " + entityName + ": " + l.getText());
		return l.getText();
	}

	/** Выбирает первое значение на форме и ждет закрытия окна
	 * @return возвращает выбранное значение
	 */
	public String selectValueAndWaitForCloseWnd(){
		initializeColumns();
		Label l = new Label(By.xpath(String.format(nameTemplate, nameColumn)), "Наименование " + entityName);
		String name =  l.getText();
		logger.info("Наименование " + entityName + ": " + name);
		l.clickAndWaitForCloseWindow();
		return name;
	}
}
